package dao.caminhoneiro;

import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;

import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

import tcc.caminhoneiro.R;

import android.support.v4.app.FragmentActivity;
import android.location.Location;
import android.os.AsyncTask;
import entidade.caminhoneiro.Endereco;
import entidade.caminhoneiro.Frete;
import entidade.caminhoneiro.FreteBundle;
import entidade.caminhoneiro.Produto;
import entidade.caminhoneiro.Produtor;
import android.app.ProgressDialog;

import android.widget.Toast;

import apresentacao.caminhoneiro.Activity_Menu_Principal;
import apresentacao.caminhoneiro.Fragment_Buscar_Fretes_Resultado;
import apresentacao.caminhoneiro.Fragment_Result_Buscar_Fretes;

// Abre uma nova thread para nao deixar o aplicativo pesado e faz a busca
public class AsyncTask_Buscar_Fretes_Raio extends AsyncTask<Void, Void, String>{
	
	private final String SERVER = "http://nome-produtor.rhcloud.com/caminhoneiro_notifications/";
	
	private ProgressDialog progress;
	private FragmentActivity context;	
	private int raio;
	private int numberFretes;
	private String retorno;
	
	private Location freteLoc;
	private Location localAtual;
	
	public static ArrayList<Frete> fretes = new ArrayList<Frete>();
	
	String
	idFrete, preco, descricao, status, nomeProdutor, telefoneProdutor,
	idProdutor, nomeproduto, pesoproduto, descricaoproduto, especieproduto,  
	cidadeOrigem, estadoOrigem, completoOrigem, 
	cidadeDestino, estadoDestino, completoDestino,
	Cbau, Cbau_frigorifico, Cboiadeiro, Ccacamba, Ccontainer, Cgaiola, Cgrade_baixa, Cgraneleiro, Cmunk, Cprancha, Csider, Csilo, Ctanque, Cso_cavalo, Cmecanico, 
	Vrodotrem, Vbitrem, Vcarreta_ls, Vbi_truck, Vtruck, Vtoco, Vtres_por_quatro, Vvlc,
	latitude, longitude;
	
	public AsyncTask_Buscar_Fretes_Raio(int raio, FragmentActivity context) {
		this.context 		= context;
		this.raio = raio;
		numberFretes = 0;
	}
	
	@Override
	protected String doInBackground(Void... params) {
		if (!hasLocal()) return "Posicionamento desconectado.";
		PostRequest req = new PostRequest(SERVER);
		
		try{
			 retorno = req.doPostRequest().readLine();
			 if (retorno.equals("0")) return "Nenhum frete encontrado.";
			 numberFretes = 0;
			 fillObjects();
			 if (numberFretes > 0)
			  return "OK";
			 else
				 return "Nenhum frete encontrado.";
		}catch(Exception e){
			return e.toString();
		}
	}
	
	@Override
	protected void onPostExecute(String result) {
		super.onPostExecute(result);
		progress.dismiss();
		if(result.equals("OK")){
			FreteBundle.fretes = fretes;
			Fragment_Result_Buscar_Fretes fragment = new Fragment_Result_Buscar_Fretes();
			context.getSupportFragmentManager().beginTransaction().replace(R.id.menu_principal_llFragment, fragment).commit();
		}else{
			Toast.makeText(context, result, Toast.LENGTH_SHORT).show();
		}
	}
	
	@Override
	protected void onPreExecute() {
		// TODO Auto-generated method stub
		super.onPreExecute();
		progress = ProgressDialog.show(context, "Caminhoneiro", "Buscando fretes, aguarde...");
	}
	
	private boolean hasLocal(){
		if (Activity_Menu_Principal.localAtual != null){
			localAtual = Activity_Menu_Principal.localAtual; 
			return true;
		}
		
		return false;
	}
	
	private void fillObjects(){
		fretes = new ArrayList<Frete>();
		String numero = "";
		for(int i = 0; i < retorno.length(); i++){
			if(retorno.charAt(i) == ','){
				retorno = retorno.substring(i+1,retorno.length());
				break;
			}else{
				numero = numero + retorno.charAt(i);
			}
		}
		
		numero = numero.replace("(", "");
		numero = numero.replace("L", "");
		String[] split = retorno.split(";");
		
		for (int i = 0; i < Integer.parseInt(numero); i++) {
			
			int j = 0;
			String [] splitInterno = split[i].split("/");
			
			freteLoc = new Location("Frete");
			if (splitInterno[41].equals("None")) continue;
			freteLoc.setLatitude(Double.parseDouble(splitInterno[41]));
			if (splitInterno[42].equals("None")) continue;
			freteLoc.setLongitude(Double.parseDouble(splitInterno[42]));
			
			if (localAtual == null) break;
			if ((int)localAtual.distanceTo(freteLoc) > raio) continue;
			
			idFrete 			= splitInterno[j++];
			idFrete 			= idFrete.replace("'", "");
			idFrete 			= idFrete.replace(" ", "");
			
			preco 				= splitInterno[j++];
			preco 				= preco.replace(" ", "");
			
			descricao 			= splitInterno[j++];
			descricao 			= descricao.replace("'", "");
			
			//status 				= splitInterno[j++];
			//status 				= status.replace("'", "");
			//parar de usar status da tabela frete
			
			status = splitInterno[43];j++;
			status 				= status.replace("'", "");
			
			
			idProdutor		= splitInterno[j++];
			idProdutor		= idProdutor.replace("'", "");				
			
			nomeProdutor		= splitInterno[j++];
			nomeProdutor		= nomeProdutor.replace("'", "");				
			
			telefoneProdutor	= splitInterno[j++];
			telefoneProdutor	= telefoneProdutor.replace("'", "");				
			
			nomeproduto 		= splitInterno[j++];
			nomeproduto 		= nomeproduto.replace("'", "");				
			
			pesoproduto			= splitInterno[j++];				
			
			descricaoproduto	= splitInterno[j++];
			descricaoproduto	= descricaoproduto.replace("'", "");		
			
			especieproduto		= splitInterno[j++];
			especieproduto		= especieproduto.replace("'", "");				
			
			cidadeOrigem 		= splitInterno[j++];
			cidadeOrigem 		= cidadeOrigem.replace("'", "");				
			
			estadoOrigem 		= splitInterno[j++];
			estadoOrigem 		= estadoOrigem.replace("'", "");
			
			completoOrigem		= splitInterno[j++];
			completoOrigem		= completoOrigem.replace("'", "");				
			
			cidadeDestino 		= splitInterno[j++];
			cidadeDestino 		= cidadeDestino.replace("'", "");				
			
			estadoDestino 		= splitInterno[j++];
			estadoDestino		= estadoDestino.replace("'", "");
			
			completoDestino		= splitInterno[j++];
			completoDestino		= completoDestino.replace("'", "");
			
			Cbau 				= splitInterno[j++];
			Cbau 				= Cbau.replace(" ", "");
			
			Cbau_frigorifico 	= splitInterno[j++];
			Cbau_frigorifico 	= Cbau_frigorifico.replace(" ", "");
			
			Cboiadeiro 			= splitInterno[j++];
			Cboiadeiro 			= Cboiadeiro.replace(" ", "");
			
			Ccacamba 			= splitInterno[j++];
			Ccacamba 			= Ccacamba.replace(" ", "");
			
			Ccontainer 			= splitInterno[j++];
			Ccontainer 			= Ccontainer.replace(" ", "");				
			
			Cgaiola 			= splitInterno[j++];
			Cgaiola 			= Cgaiola.replace(" ", "");				
			
			Cgrade_baixa 		= splitInterno[j++];
			Cgrade_baixa 		= Cgrade_baixa.replace(" ", "");				
			
			Cgraneleiro 		= splitInterno[j++];
			Cgraneleiro 		= Cgraneleiro.replace(" ", "");				
			
			Cmunk 				= splitInterno[j++];
			Cmunk 				= Cmunk.replace(" ", "");				
			
			Cprancha 			= splitInterno[j++];
			Cprancha 			= Cprancha.replace(" ", "");				
			
			Csider 				= splitInterno[j++];
			Csider 				= Csider.replace(" ", "");				
			
			Csilo 				= splitInterno[j++];
			Csilo 				= Csilo.replace(" ", "");				
			
			Ctanque 			= splitInterno[j++];
			Ctanque 			= Ctanque.replace(" ", "");				
			
			Cso_cavalo 			= splitInterno[j++];
			Cso_cavalo 			= Cso_cavalo.replace(" ", "");				
			
			Cmecanico 			= splitInterno[j++];
			Cmecanico 			= Cmecanico.replace(" ", "");				
			
			Vrodotrem 			= splitInterno[j++];
			Vrodotrem 			= Vrodotrem.replace(" ", "");				
			
			Vbitrem 			= splitInterno[j++];
			Vbitrem 			=Vbitrem.replace(" ", "");				
			
			Vcarreta_ls 		= splitInterno[j++];
			Vcarreta_ls 		= Vcarreta_ls.replace(" ", "");				
			
			Vbi_truck 			= splitInterno[j++];
			Vbi_truck 			= Vbi_truck.replace(" ", "");				
			
			Vtruck 				= splitInterno[j++];
			Vtruck 				= Vtruck.replace(" ", "");
			
			Vtoco 				= splitInterno[j++];
			Vtoco 				= Vtoco.replace(" ", "");
			
			Vtres_por_quatro 	= splitInterno[j++];
			Vtres_por_quatro 	= Vtres_por_quatro.replace(" ", "");				
			
			Vvlc 				= splitInterno[j++];
			Vvlc 				= Vvlc.replace(" ", "");
			Vvlc				= Vvlc.replace(")", "");
			
			
			
			boolean[] carrocerias= {Cbau.equals			("1")?true:false, Cbau_frigorifico.equals	("1")?true:false, Cboiadeiro.equals	("1")?true:false,
									Ccacamba.equals		("1")?true:false, Ccontainer.equals			("1")?true:false, Cgaiola.equals	("1")?true:false,
									Cgrade_baixa.equals	("1")?true:false, Cgraneleiro.equals		("1")?true:false, Cmunk.equals		("1")?true:false,
									Cprancha.equals		("1")?true:false, Csider.equals				("1")?true:false, Csilo.equals		("1")?true:false,
									Ctanque.equals		("1")?true:false, Cso_cavalo.equals			("1")?true:false, Cmecanico.equals	("1")?true:false};
			
			boolean[] veiculos 	= {	Vrodotrem.equals		("1")?true:false, Vbitrem.equals("1")?true:false, Vcarreta_ls.equals("1")?true:false,
									Vbi_truck.equals		("1")?true:false, Vtruck.equals	("1")?true:false, Vtoco.equals		("1")?true:false,
									Vtres_por_quatro.equals	("1")?true:false, Vvlc.equals	("1")?true:false};
			
			Endereco enderecoOrigem = new Endereco(estadoOrigem, cidadeOrigem, completoOrigem);
			Endereco enderecoDestino = new Endereco(estadoDestino, cidadeDestino, completoDestino);
			Produto produto = new Produto(nomeproduto, Float.parseFloat(pesoproduto), especieproduto, descricaoproduto);
			Produtor produtor = new Produtor(nomeProdutor, telefoneProdutor, Integer.parseInt(idProdutor));
			Frete frete = new Frete(Integer.parseInt(idFrete), produtor, enderecoOrigem, enderecoDestino, produto, veiculos, carrocerias, Float.parseFloat(preco), status, descricao);
			fretes.add(frete);
			numberFretes++;
		}
	}
}
